www.gusucode.com > VC++ P2P下载软件源代码-源码程序 > VC++ P2P下载软件源代码-源码程序\code\MakeDefs\MakeDefs.cpp

    //Download by http://www.NewXing.com
// MakeDefs.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "../client/DCPlusPlus.h"

#include "../client/SimpleXML.h"
#include "../client/File.h"
#include "../client/StringTokenizer.h"

SettingsManager* Singleton<SettingsManager>::instance = 0;

/*
int __cdecl main(int argc, char* argv[]) {
	File src(argv[1], File::READ, File::OPEN);
	string x = src.read();

	DWORD y = GetTickCount();
	SimpleXML xml;
	xml.fromXML(x);
	printf("%d\n", GetTickCount() - y);
	return 0;
}
*/
int __cdecl main(int argc, char* argv[])
{
	if(argc < 3) {
		return 0;
	}
	
	try {
		File src(argv[1], File::READ, File::OPEN);
		File tgt(argv[2], File::WRITE, File::CREATE | File::TRUNCATE);
		File example(argv[3], File::WRITE, File::CREATE | File::TRUNCATE);
		string x = src.read();

		string::size_type k;
		
		while((k = x.find('\r')) != string::npos) {
			x.erase(k, 1);
		}

		StringList l = StringTokenizer(x).getTokens();

		StringIter i;
		string varStr;
		string varName;
		string start;

		SimpleXML ex;

		for(i = l.begin(); i != l.end(); ) {
			if( (k = i->find("// @Strings: ")) != string::npos) {
				varStr = i->substr(k + 13);
				i = l.erase(i);
			} else if( (k = i->find("// @Names: ")) != string::npos) {
				varName = i->substr(k + 11);
				i = l.erase(i);
			} else if(i->find("// @DontAdd") != string::npos) {
				i = l.erase(i);
			} else if( (k = i->find("// @Prolog: ")) != string::npos) {
				start += i->substr(k + 12) + "\r\n";
				i = l.erase(i);
			} else if(i->size() < 5) {
				i = l.erase(i);
			} else {
				++i;
			}
		}

		if(varStr.empty() || varName.empty()) {
			printf("No @Strings or @Names\n");
			return 0;
		}
		
		varStr += " = {\r\n\t";
		varName += " = {\r\n\t";
		
		ex.addTag("Language");
		ex.addChildAttrib("Name", string("Example Language"));
		ex.stepIn();
		ex.addTag("Strings");
		ex.stepIn();
		int a = 0;
		string name;
		string def;
		string s;
		for(i = l.begin(); i != l.end(); i++) {

			name.clear();
			s = *i;

			bool u = true;
			for(k = s.find_first_not_of(" \t"); s[k] != ','; k++) {
				if(s[k] == '_') {
					u = true;
				} else if(u) {
					name+=s[k];
					u = false;
				} else {
					name+=(char)tolower(s[k]);
				}
			}

			k = s.find("// ");
			def = s.substr(k + 3);
			
			ex.addTag("String", def.substr(1, def.size() - 2));
			ex.addChildAttrib("Name", name);

			varStr += def + ", \r\n";
			varName += '\"' + name + "\", \r\n";

			/*if(((++a) % 5) == 0) {
				varStr += "\r\n";
				varName += "\r\n";
			}*/

		}

		varStr.erase(varStr.size()-2, 2);
		varName.erase(varName.size()-2, 2);

		varStr += "\r\n};\r\n";
		varName += "\r\n};\r\n";

		tgt.write(start);
		tgt.write(varStr);
		tgt.write(varName);

		example.write("<?xml version=\"1.0\" encoding=\"windows-1252\"?>\r\n");
		example.write(ex.toXML());
	} catch(Exception e) {
		printf("%s\n", e.getError().c_str());
	}

	return 0;
}